package br.usp.pcs.acs.client;

import java.util.ArrayList;

import br.usp.pcs.acs.client.FlightInfo;

public class FlightInfoFakes {
	
	private static final int NUM_ITEMS = 30;

    private static final String[] timeFlights = new String[]{
        "11:00", "11:10", "11:20", "11:30", "11:40", "11:50",
        "12:00", "12:10", "12:20", "12:30", "12:40", "12:50",
        "13:00", "13:10", "13:20", "13:30", "13:40", "13:50",
        "14:00", "14:10", "14:20", "14:30", "14:40", "14:50",
        "15:00", "15:10", "15:20", "15:30", "15:40", "15:50"
    };

    private static final String[] numberFlights = new String[]{
        "1", "2", "3", "4", "5", "6",
        "7", "8", "9", "10", "11", "12",
        "13", "14", "15", "16", "17", "18",
        "19", "20", "21", "22", "23", "24",
        "25", "26", "27", "28", "29", "30"
    };

    private static final String[] companyFlights = new String[]{
        "VARIG", "TAM", "GOL", "Flecha Azul", "Teco-Teco", "BIS-14",
        "VARIG", "TAM", "GOL", "Flecha Azul", "Teco-Teco", "BIS-14",
        "VARIG", "TAM", "GOL", "Flecha Azul", "Teco-Teco", "BIS-14",
        "VARIG", "TAM", "GOL", "Flecha Azul", "Teco-Teco", "BIS-14",
        "VARIG", "TAM", "GOL", "Flecha Azul", "Teco-Teco", "BIS-14"
   };

    private static final String[] departureFlights = new String[]{
        "São Paulo", "São Paulo", "São Paulo", "São Paulo", "São Paulo", "São Paulo",
        "São Paulo", "São Paulo", "São Paulo", "São Paulo", "São Paulo", "São Paulo",
        "São Paulo", "São Paulo", "São Paulo", "São Paulo", "São Paulo", "São Paulo",
        "São Paulo", "São Paulo", "São Paulo", "São Paulo", "São Paulo", "São Paulo",
        "São Paulo", "São Paulo", "São Paulo", "São Paulo", "São Paulo", "São Paulo"
    };

    private static final String[] arrivingFlights = new String[]{
        "Campinas", "Brasília", "Rio de Janeiro", "Belo Horizonte", "Salvador", "Ribeirão Preto",
        "Campinas", "Brasília", "Rio de Janeiro", "Belo Horizonte", "Salvador", "Ribeirão Preto",
        "Campinas", "Brasília", "Rio de Janeiro", "Belo Horizonte", "Salvador", "Ribeirão Preto",
        "Campinas", "Brasília", "Rio de Janeiro", "Belo Horizonte", "Salvador", "Ribeirão Preto",
        "Campinas", "Brasília", "Rio de Janeiro", "Belo Horizonte", "Salvador", "Ribeirão Preto"
    };

    private static int timeFlightIdx = 0, numberFlightIdx = 0, companyFlightIdx = 0, departureFlightIdx = 0,
        arrivingFlightIdx = 0;
    private static ArrayList<FlightInfo> items = new ArrayList<FlightInfo>();

    static {
        for (int i = 0; i < NUM_ITEMS; ++i){
            items.add(createFakeFlight());
        }
    }

    public static FlightInfo getFlightItem(int index){
        if (index >= items.size()) {
            return null;
        }
        return items.get(index);
    }

    public static int getFlightItemCount() {
        return items.size();
    }

    private static FlightInfo createFakeFlight() {
        String timeFlight = timeFlights[timeFlightIdx++];
        if (timeFlightIdx == timeFlights.length) {
            timeFlightIdx = 0;
        }

        String numberFlight = numberFlights[numberFlightIdx++];
        if (numberFlightIdx == numberFlights.length) {
            numberFlightIdx = 0;
        }

        String companyFlight = companyFlights[companyFlightIdx++];
        if (companyFlightIdx == companyFlights.length) {
            companyFlightIdx = 0;
        }

        String departureFlight = departureFlights[departureFlightIdx++];
        if (timeFlightIdx == departureFlights.length) {
            departureFlightIdx = 0;
        }

        String arrivingFlight = arrivingFlights[arrivingFlightIdx++];
        if (arrivingFlightIdx == arrivingFlights.length) {
            arrivingFlightIdx = 0;
        }

        return new FlightInfo(timeFlight, numberFlight, companyFlight, departureFlight, arrivingFlight);
    }
}
